分类
联系方式
  1. 新浪微博
  2. E-mail

RL Baselines3 Zoo

背景

在开发强化学习项目时,需要对比不同算法的学习效率,以及对同一个算法进行调参。我在个人项目中也开发了类似的框架,但是功能并不全面。RL Baselines3 Zoo 是社区中提供的一套框架,功能全面。而且基于同一套框架,它人的模型大家都能够复现,这是非常关键的。

介绍

Stable Baselines3 强化学习 Agent 训练框架。

它提供了用于训练、评估 Agent、调整超参数、绘制结果和录制视频的脚本等功能。

此外,它还包括常见环境和 RL 算法的调整超参数集合,以及用这些设置训练的 Agent。

目标:

  • 提供一个训练 Agent 的简化接口
  • 对不同 RL 算法进行性能测试
  • 给每个环境和 RL 算法提供调参后的超参数

训练 Agent

每个环境下的超参数定义在 hyperparameters/algo_name.yml 中。

如果环境在这个文件中存在,通过下面命令训练 agent:

python train.py --algo algo_name --env env_id

举例(带有 tensorboard 支持):

python train.py --algo ppo --env CartPole-v1 --tensorboard-log /tmp/stable-baselines/

每 10000 步对 Agent 进行评估,使用 10 轮进行评估(只使用一个评估环境):

python train.py --algo sac --env HalfCheetahBulletEnv-v0 --eval-freq 10000 --eval-episodes 10 --n-eval-envs 1

每 100000 步设置一个检查点:

python train.py --algo td3 --env HalfCheetahBulletEnv-v0 --save-freq 100000

连续学习(加载之前训练的 Agent,继续训练 5000 步):

python train.py --algo a2c --env BreakoutNoFrameskip-v4 -i rl-trained-agents/a2c/BreakoutNoFrameskip-v4_1/BreakoutNoFrameskip-v4.zip -n 5000

当使用 off-policy 算法的时候,可以在训练后保存 replay buffer:

python train.py --algo sac --env Pendulum-v0 --save-replay-buffer

replay buffer 将会在连续学习时被自动加载。

绘图脚本

绘图脚本(待添加文档,看 SB3 文档的 Result 小节):

  • scripts/all_plots.py/scripts/plot_from_file.py:绘制 evaluation
  • scripts/plot_train.py:绘制训练奖励

对 Fetch 环境与 HER 算法,绘制训练成功率(y轴)与时间步数(x轴)的关系图,移动窗口为 500 次:

python scripts/plot_train.py -a her -e Fetch -y success -f rl-trained-agents/ -w 500 -x steps

绘制 HalfCheetah 环境和 PyBullet 环境下,TQC, SAC 和 TD3 算法的奖励曲线:

python scripts/all_plots.py -a sac td3 tqc --env HalfCheetah Ant -f rl-trained-agents/

自定义环境

最简单的添加自定义环境的方法是编辑 utils/import_envs.py,把自己的环境注册进去。之后,需要在超参数文件 hyperparams/algo.yml 里添加一个小节。

欣赏训练好的 Agent

enjoy.py 的作用是在本地运行环境,以可视化的方式观看 Agent 的表现。运行完之后会弹一个窗口,在窗口里进行观看(欣赏,即 engoy 之意)。

训练好的 agent 在项目中以 submodule 形式存放,因此需要连 submodule 一起 clone:

git clone --recursive https://github.com/DLR-RM/rl-baselines3-zoo

如果训练好的 Agent 存在,可以通过下面方式看欣赏的行动:

python enjoy.py --algo algo_name --env env_id

举例,A2C 在 Breakout 的 5000 步行动:

python enjoy.py --algo a2c --env BreakoutNoFrameskip-v4 --folder rl-trained-agents/ -n 5000

实践记录,执行了之后半天没有反应。跑完了出来一个窗口,飞速运行打砖块游戏,玩得确实不错。 如果你自己训练的 Agent,需要这么做:

# exp-id 0 corresponds to the last experiment, otherwise, you can specify another ID
python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 0

加载最佳模型(当使用 evaluation environment 的时候):

python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-best

加载检查点(checkpoint),这里检查点的名字是 rl_model_10000_steps.zip:

python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-checkpoint 10000

加载最近一个检查点:

python enjoy.py --algo algo_name --env env_id -f logs/ --exp-id 1 --load-last-checkpoint

视频录制

zoo3 里面没有提录视频的方法,zoo2 的文档里面有,补充过来:

python -m utils.record_video --algo ppo --env BipedalWalkerHardcore-v3 -n 1000

默认会加载 rl-trained-agents 里面预先训练好的模型。自己训练的模型放在 logs 里,录制自己训练的模型:

python -m utils.record_video --algo ppo --env BipedalWalkerHardcore-v3 -n 3000 -f logs

超参数 yaml 语法

实践记录

工程搭建

首先 Clone 工程:

git clone --recursive https://github.com/DLR-RM/rl-baselines3-zoo

使用 pipenv 进行项目管理,进入项目目录执行:

pipenv install

我用 Python3.7 进行安装,但执行上面命令的时候,会提示我 black 版本解析失败。最终通过下面命令将相关包都装上了:

pipenv install --skip-lock

但是通过上面方式安装是没有 pipfile.lock 的。

Windows 构建 box2d-py 失败

报错:

error: command 'swig.exe' failed: No such file or directory

参见文章:《Python can't install Box2D swig.exe failed with error code 1》

主要原因是 swig 这个软件没有安装,有两种方式进行安装,一个是去官网下载,下载完了添加 PATH 变量。另一种方式是采用 choco 包管理器进行安装。

SWIG 是啥?他是一个接口编译器,将 C、C++ 与脚本语言进行连接,官网地址

网络资源

GitHub 首页

RL Baselines Zoo 上一代的 GitHub 首页